<?php
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['email'])){
	$db = Db::getInstance();
	$db->autocommit(false);
	try {
		$query = sprintf("SELECT * FROM Account WHERE email='%s'", $db->real_escape_string(trim($_POST['email'])));
		$result = $db->query($query);
		if(!$result){
			throw new Exception($db->error);
		}
		if($result->num_rows == 0){
			throw new Exception("ไม่เจอ email {$_POST['email']} ในระบบ");
		}
		$account = $result->fetch_assoc();
		$id = $account['id'];
		$md5 = md5(rand(1000,9999));
		$query = "INSERT INTO ResetPassword (id,code) VALUES ('{$id}','{$md5}')
			ON DUPLICATE KEY UPDATE code='{$md5}'";
		if(!$db->query($query)){
			throw new Exception($db->error);
		}
		$message = <<<HTML
		<h4>Reset Password</h4>
		<p>
			คุณได้ทำการร้องขอ การ reset password กรุณาเข้าไปยังลิงค์นี้ เพื่อ reset password<br />
			<a href="http://p2dc.com/old.php?page=resetPassword&code={$md5}">http://p2dc.com/old.php?page=resetPassword&code={$md5}</a>
		</p>
HTML;
		if(!Notify::mail($_POST['email'], 'Reset Password', $message)){
			throw new Exception('Mail send failed');
		}
		View::display('message', array("message"=> "ได้ทำการส่ง link ในการ reset password ทาง email แล้วโปรดตรวจสอบ email"));
		$db->commit();
	}
	catch (Exception $ex) {
		$db->rollback();
		Log::error($ex);
		View::display('message', array("head"=> $ex->getMessage(), 'redir'=> $_SERVER['REQUEST_URI']));
	}
}
else if($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['code'])){
	$db = Db::getInstance();
	$db->autocommit(false);
	try {
		$query = sprintf("SELECT * FROM ResetPassword WHERE code='%s'", $db->real_escape_string($_GET['code']));
		$result = $db->query($query);
		if(!$result){
			throw new Exception($db->error);
		}
		if($result->num_rows == 0){
			throw new Exception("ไม่อนุญาติให้ทำการ reset password เนื่องจากลิงค์ผิดหรือลิงค์ถูกใช้ในการ reset ไปแล้ว");
		}
		$arr = $result->fetch_assoc();
		if(!Account::changePassword($arr['id'], $_POST['newPassword'])){
			throw new Exception('Change Password Failed');
		}
		$account = Account::get($arr['id']);
		$message = <<<HTML
		<h4>ระบบได้ทำการเปลี่ยนรหัสผ่านให้คุณแล้ว</h4>
		<p>รหัสผ่านใหม่ของคุณคือ {$_POST['newPassword']}</p>
HTML;
		if(!Notify::mail($account['email'], 'ระบบได้ทำการเปลี่ยนรหัสผ่านให้คุณแล้ว', $message)){
			throw new Exception('ขัดข้อง ไม่สามารถส่ง email หา user ได้');
		}
		
		$query = sprintf("DELETE FROM ResetPassword WHERE code='%s'", $db->real_escape_string($_POST['code']));
		if(!$db->query($query)){
			throw new Exception($db->error);
		}
		View::display('message', array('head'=> 'ระบบเปลี่ยนรหัสผ่าน', 'message'=> 'ระบบได้ทำการเปลี่ยน Password ให้แล้ว',
			'redir'=> 'old.php?page=home'));
		$db->commit();
	} catch (Exception $ex) {
		$db->rollback();
		Log::error($ex);
		View::display('message', array("message"=> $ex->getMessage()));
	}
}
else if($_SERVER['REQUEST_METHOD']=='GET' && isset($_GET['code'])){
	$db = Db::getInstance();
	try {
		$query = sprintf("SELECT * FROM ResetPassword WHERE code='%s'", $db->real_escape_string($_GET['code']));
		$result = $db->query($query);
		if(!$result){
			throw new Exception($db->error);
		}
		if($result->num_rows == 0){
			throw new Exception("ไม่อนุญาติให้ทำการ reset password เนื่องจากลิงค์ผิดหรือลิงค์ถูกใช้ในการ reset ไปแล้ว");
		}
		View::display('resetPassword.form', array('code'=> $_GET['code']));
	} catch (Exception $ex) {
		$db->rollback();
		Log::error($ex);
		View::display('message', array("message"=> $ex->getMessage()));
	}
}
else {
	View::display('resetPassword');
}